package com.atguigu.mobileplayer4;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;

import com.atguigu.mobileplayer4.base.BasePager;
import com.atguigu.mobileplayer4.pager.AudioPager;
import com.atguigu.mobileplayer4.pager.NetAudioPager;
import com.atguigu.mobileplayer4.pager.NetVideoPager;
import com.atguigu.mobileplayer4.pager.VideoPager;

import java.util.ArrayList;

/**
 * 作者：杨光福 on 2016/5/21 09:35
 * 微信：yangguangfu520
 * QQ号：541433511
 * 作用：主页面
 */
public class MainActivity extends FragmentActivity {

    //在 Android 开发中，RadioGroup 是一种常用的布局组件，它用于将多个 RadioButton 组合在一起，实现单选功能
    private RadioGroup rg_main;

    //
    private ArrayList<BasePager> basePagers;

    /**
     * 页面对应的位置
     */
    private int position;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rg_main = (RadioGroup) findViewById(R.id.rg_main);

        basePagers = new ArrayList<>();
        basePagers.add(new VideoPager(this));//本地视频
        basePagers.add(new AudioPager(this));//本地音乐
        basePagers.add(new NetVideoPager(this));//网络视频
        basePagers.add(new NetAudioPager(this));//网络音乐


        //setOnCheckedChangeListener用于监听复选框（CheckBox）、单选按钮（RadioButton）或开关（Switch）等可勾选组件的状态变化
        rg_main.setOnCheckedChangeListener(new MyOnCheckedChangeListener());
        rg_main.check(R.id.rb_video);

    }


    /*****
     * RadioGroup.OnCheckedChangeListener 是一个专门用于监听 RadioGroup 中单选按钮状态变化的接口。
     * 当用户选择不同的 RadioButton 时，该接口会触发回调，让你可以执行相应的操作
     */
    class MyOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {


        /****
         * onCheckedChanged是RadioGroup的内部接口，用于监听 RadioGroup 中选中状态的变化
         * @param group   发生变化的 RadioGroup
         * @param checkedId   选中的 RadioButton 的 ID（如果没有选中项则为 -1）
         */
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId){
                default://本地视频
                    position = 0;
                    break;
                case R.id.rb_audio://本地音乐
                    position = 1;
                    break;
                case R.id.rb_net_video://网络视频
                    position = 2;
                    break;
                case R.id.rb_net_audio://网络音乐
                    position = 3;
                    break;
            }

            setFragment();

        }
    }

    /****
     * FragmentTransaction 用于管理 Fragment 的添加、移除、替换等操作
     * replace() 方法会移除当前容器中的所有 Fragment，并添加新的 Fragment。
     * 提交事务后，Fragment 的变化会异步执行。
     */
    private void setFragment() {
        FragmentManager fm =  getSupportFragmentManager();//得到fragmentManger
        FragmentTransaction ft = fm.beginTransaction();//开启事务
        ft.replace(R.id.fl_main, MyDynamicFragment.newInstance(getBasePager()));
        ft.commit();//提交
    }

    /****
     *  静态 Fragment 类
     *  Fragment 是一种可嵌入在 Activity 中的模块化组件，它能让界面设计更加灵活，尤其适合在平板等大屏幕设备上实现多面板布局
     *  Fragment 的生命周期比 Activity 更复杂，主要方法包括：
     * onCreate()：初始化 Fragment。
     * onCreateView()：创建并返回 Fragment 的 UI 视图。
     * onActivityCreated()：Activity 的 onCreate() 完成后调用。
     * onStart()、onResume()、onPause()、onStop()：与 Activity 类似。
     * onDestroyView()：移除 Fragment 的 UI 视图。
     * onDestroy()：销毁 Fragment。
     * onDetach()：Fragment 与 Activity 解除关联。
     *
      */
    public static class MyDynamicFragment extends Fragment {
        private BasePager basePager;

        // 必须有无参构造函数
        public MyDynamicFragment() {
            // 空构造函数
        }

        // 使用工厂方法传递参数
        public static MyDynamicFragment newInstance(BasePager pager) {
            MyDynamicFragment fragment = new MyDynamicFragment();
            fragment.basePager = pager;
            return fragment;
        }

        /****
         * 创建并返回 Fragment 的 UI 视图。
         * @param inflater：布局加载器，用于将 XML 布局文件转换为 View 对象。
         * @param container  Fragment 视图的父容器（通常是 Activity 中的 FrameLayout）。
         * @param savedInstanceState 用于恢复 Fragment 之前保存的状态（可能为 null）。
         * @return
         */
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if (basePager != null) {
                return basePager.rootView;
            }
            return null;
        }
    }


    /****
     * 这个方法是通过点击点选按钮组来得到具体的每一个页面
     * @return
     */
    private BasePager getBasePager() {
        //根据点击的时候 触发onCheckedChanged事件得到下边的值   知道具体是哪个实例
        BasePager basePager = basePagers.get(position);
        if(basePager != null&&!basePager.isInitData){
            basePager.isInitData = true;
            basePager.initData();   //调用初始化的数据
        }
        return basePager;
    }
}
